﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EGuayas.Web.Resources;
using EntGuayasSLA.BL.Listas;
using Ext.Net;
using EntGuayasSLA.BL;
using System.IO;
using System.Text;
using EntGuayasSLA.BL.Licenciamiento;
using EGuayas.Web.Usuario;
using EGuayas.Web.Licenciamiento.promotor.tabs;
using EntGuayasSLA.BL.Listas.Criterias;
using System.Xml.Linq;

namespace EGuayas.Web.Expedientes
{
    public partial class pgEditExpediente : ExpedienteIU
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {

                    ExpedienteIdTmp        = "";
                    ExpedienteEstadoTmp    = "";
              
                    var provinciaList = ProvinciaLista.GetProvinciaLista();
                    stoProvincia.DataSource = provinciaList.Where(prov => prov.Nombre.ToUpper() == "GUAYAS").ToList();
                    stoProvincia.DataBind();
                    //Asignar valor de la session evento
                    SetSessionPage setSession = new SetSessionPage(SessionPage.PageGestionExpLic,
                                                                    Valores.PageEvento_Modificar);
                    //Setear Evento
                    this.hdEvento.SetValue(Valores.PageEvento_Modificar);
                    string requestEvento = Request.QueryString.Get("evt");
                    if (requestEvento!=null)
                    {
                        if (requestEvento == "read")
                        {
                            setSession = new SetSessionPage(SessionPage.PageGestionExpLic,
                                                                     Valores.PageEvento_Lectura);

                            this.hdEvento.SetValue(Valores.PageEvento_Lectura);
                        }
                    }
                    //var nuevo = true;
                    object idso;
                    var ids = "";
                    try
                    {
                        idso = Session[SessionPage.PageLicAdm + Constantes.Expediente];
                        if (idso != null)
                        {
                            ids = idso.ToString();
                        }
                    }
                    catch (Exception)
                    {

                    }
                    //Pagina que invoca url =>AppGlobalJs.mostrarVentanaUrl('pgNuevoExpediente.aspx?id='+record.data.Id,'Expediente');
                    string idExpediente = Request.QueryString.Get("id");

                    //if (ids != "")//Error Caso ids!="" se asigna eroneamente valor idExpediente, si es invocado con request <id>
                    //Y esta seteado el valor de  idso = Session[SessionPage.PageLicAdm + Constantes.Expediente]
                    if (ids != "" & idExpediente == null)//ok
                    {
                        idExpediente = ids;
                    }

                    if (!string.IsNullOrEmpty(idExpediente) || ids != "")
                    {
                        //idExpediente = ids;//Error si ids=="" se asigna idExpediente valor erroneo
                        X.Msg.Wait("Cargando...");
                        //Setear Expediente
                        ExpedienteIdTmp = idExpediente;

                        Parroquia objParrExp=null;
                        List<string> txtIdsArray=null;
                        string codeIdTxt = "";

                        ExpedienteLicenciamiento objExpLic = ExpedienteLicenciamiento.GetEditableRoot(Guid.Parse(ExpedienteIdTmp));
                        ExpedienteLicEstadoTmp = objExpLic.Estado;
                        //Asigna valor a campo readonly
                        this.hdClasificacion.SetValue(objExpLic.Categoria);
                       
                        Dynamic respuestas = this.GetPreguntasForm(idExpediente,  out objParrExp, out txtIdsArray, out codeIdTxt);
                        Comentario objComentario = Comentario.GetEditableRoot(ExpedienteIdTmp);
                        if (!string.IsNullOrEmpty(objComentario.ExpedienteId))
                        {
                            this.txtObs.Text = objComentario.Mensaje;
                        }
                        //X.Js.Call("TestFormOk", respuestas.Dictionary);//Validar si existen elementos generados en el formulario
                        codeIdTxt = this.SetValidacionesFicha(respuestas, codeIdTxt, this.GroupTabPanel1);
                      
                        this.frmExpediente.Reset();
                        this.frmExpediente.SetValues(respuestas.Dictionary);
                    
                        CodeFaseInicial = respuestas.Get("CodigoFaseNow");
                        X.Js.Call("SetAllowBlankTxt", txtIdsArray);
                        X.Js.Call("SetLocalidadExpediente", objParrExp.ProvinciaId, objParrExp.CantonId, objParrExp.Id,true);
                        this.cbxClasif.SetValueAndFireSelect(respuestas.Get("Categoria"));                    
                        //Según categoria vizualizar tabs
                        switch (respuestas.Get("Categoria"))
                        { 
                            case ""://Caso de auditoria                            
                                this.frmCard_1.Disable();
                                this.panContenedorDatosFicha.ActiveIndex = 0;
                                this.btnAtras.Hide();
                                this.btnSiguiente.Hide();
                                this.btnSave.Show();
                                //Asignar valor estado completo datos de expediente
                                this.hdEstado.SetValue("Completo");
                                this.hdCategoriaNext.SetValue("true");
                                this.cbxClasif.Hide();
                                this.cbxClasif.AllowBlank= true;
                                break;
                            case "c1":
                            case "c2":
                            case "c3":
                                this.frmCard_1.Disable();
                                this.panContenedorDatosFicha.ActiveIndex = 0;
                                this.btnAtras.Hide();
                                this.btnSiguiente.Hide();
                                this.btnSave.Show();
                                //Asignar valor estado completo datos de expediente
                                this.hdEstado.SetValue("Completo");
                                this.hdCategoriaNext.SetValue("true");
                                break;
                          case "c4":
                          case "c5":
                                this.frmCard_1.Enable();
                                this.panContenedorDatosFicha.ActiveIndex = 0;
                               
                                if (ExpedienteLicEstadoTmp == Valores.Codigo_Estado_Exp_Lic_Inicial)
                                    this.hdEstado.SetValue("");
                                else
                                    this.hdEstado.SetValue("Completo");
                                this.hdCategoriaNext.SetValue("false");
                                this.CheckButtonsEditar();
                                break;
                        
                        
                        }
                        //
                        wucLoadDoc objLoadDoc = (wucLoadDoc)this.uc_load_exp.UserControls[0];
                        objLoadDoc.WucInit(SessionPage.PageGestionExpLic,respuestas.Get("CodigoFaseNow"));
                        //Validar si estado de expediente es creado
                        if (objExpLic.Estado == Valores.Codigo_Estado_Exp_Lic_Inicial)
                        {
                            X.Msg.Show(new MessageBoxConfig()
                            {
                                Message = "Complete toda la <b>información del expediente</b> para continuar",
                                Title = Titulos.TituloAviso,
                                Buttons = MessageBox.Button.OK,
                                Icon = MessageBox.Icon.INFO
                            });
                            this.frmDocumentos.Disable();

                        }
                        else
                        {
                            //Habilita para que pueda ingresar mas documentos
                            X.Js.Call("showBtnSubirArchivos");
                            this.frmDocumentos.Enable();
                        }



                    }
                    //
                    CategoriaInformacionLista preguntas = CategoriaInformacionLista.GetCategoriaInformacionLista();
                    List<string> idPreguntas = new List<string>();
                    foreach (var pregunta in preguntas)
                    {
                        idPreguntas.Add("txtArea_" + pregunta.Codigo);

                    }
                    X.Js.Call("setHidenComentario", idPreguntas, GetSessionUsuario.UsuarioRolCodigo, (string.IsNullOrEmpty(idExpediente)) ? "H" : "S");

                    //
                    if (GetSessionUsuario.UsuarioRolCodigo != Valores.Codigo_Rol_Promotor)
                    {
                        this.tabPanelExp.CloseTab(1, CloseAction.Hide);
                    }
                    else
                    {
                        this.txtObs.ReadOnly = true;
                    }
                   


                } //if (!X.IsAjaxRequest)
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }

        /// <summary>
        /// Modifica información de expediente
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSave_Click(object sender, DirectEventArgs e)
        {
            try
            {
                //
                string codFaseInicial = this.SaveFicha(e, "MODIFICAR", false);                
                string msgEvento = string.Format("{0} <b>{1}</b>", "Expediente", "Modificado");
                Comentario objComentario = Comentario.GetEditableRoot(ExpedienteIdTmp);
                if (string.IsNullOrEmpty(objComentario.ExpedienteId))
                {
                    objComentario = Comentario.NewEditableRoot();
                    objComentario.ExpedienteId = ExpedienteIdTmp;
                    objComentario.Id = Guid.NewGuid();
                }
                if (!string.IsNullOrEmpty(this.txtObs.Text))
                {
                    objComentario.PersonaId = GetSessionUsuario.PersonaId;
                    objComentario.Mensaje = this.txtObs.Text;
                    objComentario.Save();
                }
                X.Msg.Show(new MessageBoxConfig() { Message = msgEvento, Title = Titulos.TituloAviso, Buttons = MessageBox.Button.OK, Icon = MessageBox.Icon.INFO });

                this.hdEstado.SetValue("COMPLETO");
                CheckButtonsEditar();
               
                
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
       
        private void CheckButtonsEditar()
        {
            try
            {
                int index = this.panContenedorDatosFicha.ActiveIndex;
                Boolean valDisabled = index == (this.panContenedorDatosFicha.Items.Count - 1);

                this.btnAtras.Disabled = index == 0;

                switch (GetSessionPage.GetSession(SessionPage.PageGestionExpLic))
                {

                    case Valores.PageEvento_Lectura:
                        this.btnSave.Hide();
                        if (valDisabled == true)
                        {


                            this.btnSiguiente.Hide();
                        }
                        else
                        {

                            if (this.hdCategoriaNext.Text == "true")
                            {
                                this.btnSiguiente.Hide();
                            }
                            else
                            {
                                this.btnSiguiente.Show();
                            }

                        }
                        break;
                    case Valores.PageEvento_Modificar:
                        //Si falta completar información
                        if (this.hdEstado.Text == "")
                            this.btnSave.Hide();
                        else
                            this.btnSave.Show();
                     
                        if (valDisabled == true)
                        {

                           
                            this.btnSiguiente.Hide();
                        }
                        else
                        {
                            //Categoria donde no esxiste ficha
                            if (this.hdCategoriaNext.Text == "true")
                            {
                                this.btnSiguiente.Hide();
                            }
                            else
                            {
                                this.btnSiguiente.Show();
                            }

                        }
                       
                        break;

                }
                //Limpiar Icono de Error
                X.Js.Call("ClerValidInfo");

            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }
        protected void cbbProvincia_Select(object sender, DirectEventArgs e)
        {
            try
            {
                var cantonList = CantonLista.GetCantonLista(e.ExtraParams["Id"]);
                var cantonesSinGuayaquil = cantonList.Where(cl => cl.Nombre.ToUpper() != "GUAYAQUIL").ToList();

                cbbCanton.Reset();
                cbbParroquia.Reset();
                stoParroquia.RemoveAll();
                stoCanton.DataSource = cantonesSinGuayaquil;
                stoCanton.DataBind();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        protected void cbbCanton_Select(object sender, DirectEventArgs e)
        {
            try
            {
                var parroquiaList = ParroquiaLista.GetParroquiaLista(e.ExtraParams["Id"]);
                cbbParroquia.Reset();
                stoParroquia.DataSource = parroquiaList;
                stoParroquia.DataBind();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        [DirectMethod(ShowMask = true)]
        public ListLocalidad GetCanton(string Id, string IdParroquia)
        {
            ListLocalidad valReturn = new ListLocalidad();
            try
            {

                valReturn.ListCanton = CantonLista.GetCantonLista(Id);
                valReturn.ListParroq = ParroquiaLista.GetParroquiaLista(IdParroquia);

                this.cbbCanton.Reset();
                this.cbbParroquia.Reset();
                this.stoParroquia.RemoveAll();


                this.cbbParroquia.Reset();
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return (valReturn);

        }
       
       


    }
}